﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using Telerik.WinControls;
using Telerik.WinControls.Data;
using Telerik.WinControls.UI;
using System.IO;
using System.Text.RegularExpressions;

namespace QuanLyNhapXuat.Presentation.WinForm
{
    public partial class frmQuanLiTaiKhoan : Telerik.WinControls.UI.RadForm
    {
        private static frmQuanLiTaiKhoan doituong = null;
        public static frmQuanLiTaiKhoan TaoDoiTuong()
        {
            if (doituong == null)
                doituong = new frmQuanLiTaiKhoan();
            return doituong;
        }
        public frmQuanLiTaiKhoan()
        {
            InitializeComponent();
            
        }
        //Khai Báo và Định Nghĩa Biến Toàn Cục Sẽ Dùng Cho Các Sự Kiện
        SR_XL_TaiKhoan.WS_TaiKhoanSoapClient xl_TaiKhoan = new QuanLyNhapXuat.SR_XL_TaiKhoan.WS_TaiKhoanSoapClient();
        SR_NhanVien.WS_NhanVienSoapClient xl_NhanVien = new QuanLyNhapXuat.SR_NhanVien.WS_NhanVienSoapClient();
        DataSet tableSET_NhanVien = new DataSet();
        DataSet tableSET_TaiKhoan = new DataSet();
        DataSet tableSET_TaiKhoan_MaTK = new DataSet();
        DataTable table_NhanVien = new DataTable();
        DataTable table_TaiKhoan = new DataTable();
        DataTable table_TaiKhoan_MaTK = new DataTable();
        int Index_TK = 0;
        int Index_NV = 0;
        bool sukienthem = true;
        bool enabled = true;
        //Khai Báo và Định Nghĩa Hàm Sẽ Dùng Cho Các Sự Kiện
        public void SuKienThem(bool a)
        {
            if (a == true)
            {
                txt_MatKhau.Clear();
                txt_PhanQuyen.Clear();
                txt_TenDangNhap.Clear();
                Enabled_True_False(true);
                Muticolumn_cbx_TaiKhoan.Enabled = false;
                multi_cbx_MaNhanVien.Enabled = true;
            }
            else
            {
                Muticolumn_cbx_TaiKhoan.Enabled = true;
            }
        }
        public void Enabled_True_False(bool a)
        {
            txt_MatKhau.Enabled = a;
            txt_TenDangNhap.Enabled = a;
            txt_PhanQuyen.Enabled = a;
        }
        public void Load_TaiKhoan2cbx()
        {
            //Chinh do dai cua cac cot trong muiltcombobox
            RadMultiColumnComboBoxElement multiColumnComboElement = this.multi_cbx_MaNhanVien.MultiColumnComboBoxElement;
            multiColumnComboElement.DropDownSizingMode = SizingMode.UpDownAndRightBottom;
            multiColumnComboElement.DropDownMinSize = new Size(300, 200);

            table_NhanVien.Clear();
            table_TaiKhoan.Clear();
            multi_cbx_MaNhanVien.Enabled = false;
            //--------------------//
            tableSET_TaiKhoan.ReadXml(new StringReader(xl_TaiKhoan.LayDS()));
            if (tableSET_TaiKhoan.Tables.Count > 0)
            {
                for (int i = 0; i < tableSET_TaiKhoan.Tables[0].Rows.Count; i++)
                {
                    if (tableSET_TaiKhoan.Tables[0].Rows[i]["PhanQuyen"].ToString() == "Admin")
                        tableSET_TaiKhoan.Tables[0].Rows[i].Delete();
                }
                table_TaiKhoan = tableSET_TaiKhoan.Tables[0];
                Muticolumn_cbx_TaiKhoan.DataSource = table_TaiKhoan;

                //lấy ra danh sách các nhân viên chưa có tài khoản
                string cautruyvan = "select manv,hoNV,tenNV from nhanvien where manv not in(select manv from taikhoan)";
                tableSET_NhanVien.ReadXml(new StringReader(xl_NhanVien.SelectSQL(cautruyvan)));
                if (tableSET_NhanVien.Tables.Count > 0)
                {
                    table_NhanVien = tableSET_NhanVien.Tables[0];
                    multi_cbx_MaNhanVien.DataSource = table_NhanVien;
                    multi_cbx_MaNhanVien.Text = table_TaiKhoan.Rows[Index_TK][1].ToString().Trim();
                }
            }
        }
        public string XL_MATK()
        {
            string matk = "";
            try
            {
               
                string cautruyvan = "Select top 1 matk from taikhoan order by matk desc";
                tableSET_TaiKhoan_MaTK.Clear();
                tableSET_TaiKhoan_MaTK.ReadXml(new StringReader(xl_TaiKhoan.SelectSQL(cautruyvan)));
                if (tableSET_TaiKhoan_MaTK.Tables.Count == 0)
                {
                    matk = "TK00000001";
                    matk.Trim();
                }
                else
                {
                    matk = tableSET_TaiKhoan_MaTK.Tables[0].Rows[0][0].ToString().Trim();
                    int so = int.Parse(matk.Substring(2, 8).ToString().Trim()) + 1;
                    matk = "TK" + so.ToString("00000000");
                    matk.Trim();
                }
                
            }
            catch (Exception)
            {
                
               
            }
            return matk;
           

        }

        //Định nghĩa các sự kiện
        private void btn_Them_Click(object sender, EventArgs e)
        {
            btn_Sua.Enabled = false;
            btn_Them.Enabled = false;
            btn_Xoa.Enabled = false;
            if (table_NhanVien.Rows.Count > 0)
            {
                sukienthem = true;
                SuKienThem(sukienthem);
                multi_cbx_MaNhanVien.Text = table_NhanVien.Rows[0][0].ToString().Trim();
            }
            else 
            {
                MessageBox.Show("Tất cả nhân viên đã được tạo tài khoản","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Information);
                btn_Sua.Enabled = true;
                btn_Them.Enabled = true;
                btn_Xoa.Enabled = true;
            }
            
            
        }

        private void frmQuanLiTaiKhoan_Load(object sender, EventArgs e)
        {            
            enabled = false;
            Enabled_True_False(enabled);
            Load_TaiKhoan2cbx();
        }
        //Kiểm tra mã nhân viên có chính xác hay khong
        public bool kt_manv()
        {
            bool kq = false;
            int so = table_NhanVien.Rows.Count;
            string ma_nv = multi_cbx_MaNhanVien.Text.Trim();
            for (int i = 0; i < so; i++)
            {
                if (ma_nv == table_NhanVien.Rows[i][0].ToString().Trim())
                {
                    kq = true;
                    return kq;
                }
            }
            return kq;
        }
        public bool kt_tendn()
        {
            bool kq = false;
            int so = table_TaiKhoan.Rows.Count;
            string tendn = txt_TenDangNhap.Text.Trim();
            for (int i = 0; i < so; i++)
            {
                if (tendn == table_TaiKhoan.Rows[i]["TENDANGNHAP"].ToString().Trim())
                {
                    kq = true;
                    return kq;
                }
            }
            return kq;
        }
        private void btn_CapNhat_Click(object sender, EventArgs e)
        {
            bool kq = kiemtra();
            if (kq)
            {
                Index_TK = Muticolumn_cbx_TaiKhoan.SelectedIndex;
                //Sua
                if (sukienthem == false)
                {

                    string matk = table_TaiKhoan.Rows[Index_TK][0].ToString().Trim();
                    string manv = multi_cbx_MaNhanVien.Text;
                    string tendn = txt_TenDangNhap.Text.ToString();
                    string matkhau = txt_MatKhau.Text.ToString();
                    string phanquyen = txt_PhanQuyen.Text.ToString();
                    xl_TaiKhoan.Sua(matk, manv, tendn, matkhau, phanquyen);
                    btn_Xoa.Enabled = true;
                    btn_Sua.Enabled = true;
                    btn_Them.Enabled = true;


                }
                //Them
                else
                {
                    string matk = XL_MATK();
                    string manv = multi_cbx_MaNhanVien.Text.Trim();
                    if (manv != ""&&(kt_manv()==true))
                    {
                            string tendn = txt_TenDangNhap.Text.ToString().Trim();
                            string matkhau = txt_MatKhau.Text.ToString().Trim();
                            string phanquyen = txt_PhanQuyen.Text.ToString().Trim();
                            xl_TaiKhoan.Them(matk, manv, tendn, matkhau, phanquyen);
                            btn_Sua.Enabled = true;
                            btn_Them.Enabled = true;
                            btn_Xoa.Enabled = true;
                    }
                    else
                    {
                        MessageBox.Show("Mã nhân viên không tồn tại","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Information);
                        btn_Sua.Enabled = true;
                        btn_Them.Enabled = true;
                        btn_Xoa.Enabled = true;
                    }

                }

                Load_TaiKhoan2cbx();

                //Sau khi cap xoa || sua :

                multi_cbx_MaNhanVien.Enabled = false;
                Muticolumn_cbx_TaiKhoan.Enabled = true;
                Enabled_True_False(false);
                Muticolumn_cbx_TaiKhoan.SelectedIndex = 0;
            }
        }
        private void btn_Sua_Click(object sender, EventArgs e)
        {
            btn_Xoa.Enabled = false;
            btn_Sua.Enabled = false;
            btn_Them.Enabled = false;
            enabled = true;
            Enabled_True_False(enabled);
            //txt_TenDangNhap.Enabled = false;
            sukienthem = false;
            txt_TenDangNhap.Enabled = false;
            
        }

        private void btn_Xoa_Click(object sender, EventArgs e)
        {
            try
            {

           
                if((MessageBox.Show("Bạn chắc chắn muốn xóa nhân viên này ?","Thông Báo",MessageBoxButtons.YesNo,MessageBoxIcon.Question))==DialogResult.Yes)
                    {
                        xl_TaiKhoan.Xoa(table_TaiKhoan.Rows[Index_TK][2].ToString().Trim());
                        Load_TaiKhoan2cbx();
                        Muticolumn_cbx_TaiKhoan.SelectedIndex = 0;
                    }
                }
            catch (Exception)
            {
                multi_cbx_MaNhanVien.Text = "";
                txt_TenDangNhap.Clear();
                txt_MatKhau.Clear();
                txt_PhanQuyen.Clear();
                MessageBox.Show("Không còn dữ liệu để xóa","Thông báo",MessageBoxButtons.OK,MessageBoxIcon.Information);
            }
        }

        private void Muticolumn_cbx_TaiKhoan_SelectedIndexChanged(object sender, EventArgs e)
        {
            try
            {

                if (Muticolumn_cbx_TaiKhoan.SelectedIndex != -1)
                {
                    Index_TK = Muticolumn_cbx_TaiKhoan.SelectedIndex;
                    multi_cbx_MaNhanVien.Text = table_TaiKhoan.Rows[Index_TK][1].ToString().Trim();
                    txt_TenDangNhap.Text = table_TaiKhoan.Rows[Index_TK][2].ToString().Trim();
                    txt_MatKhau.Text = table_TaiKhoan.Rows[Index_TK][3].ToString().Trim();
                    txt_PhanQuyen.Text = table_TaiKhoan.Rows[Index_TK][4].ToString().Trim();
                
                }

            }
            catch (Exception)
            {

                
            }
    
        }

        private void btn_Huy_Click(object sender, EventArgs e)
        {
            btn_Sua.Enabled = true;
            btn_Them.Enabled = true;
            btn_Xoa.Enabled = true;
            Load_TaiKhoan2cbx();
            sukienthem=false;
            SuKienThem(sukienthem);
            enabled = false;
            Enabled_True_False(enabled);
            Muticolumn_cbx_TaiKhoan.SelectedIndex = 0;
        }

        private void txt_TenDangNhap_Leave(object sender, EventArgs e)
        {
        //    string patern = @"^[^0-9]\w[^0-9]+$";
        //    Regex rg = new Regex(patern);
        //    Match m = rg.Match(txt_TenDangNhap.Text);
        //    if (!m.Success)
        //    {
        //        MessageBox.Show("Tên đăng nhập không được để trống và chỉ được nhập chữ !!!", "Lỗi");
        //        txt_TenDangNhap.Focus();
        //    }
        }

        private void txt_MatKhau_Leave(object sender, EventArgs e)
        {
            //string patern = @"^\d{3,8}$";
            //Regex rg = new Regex(patern);
            //Match m = rg.Match(txt_MatKhau.Text);
            //if (!m.Success)
            //{
            //    MessageBox.Show("Mật khẩu không được để trống và phải từ 3 tới 8 số!!!", "Lỗi");
            //    txt_MatKhau.Focus();
            //}
        }

        private void txt_PhanQuyen_Leave(object sender, EventArgs e)
        {
            //string patern = @"^[^0-9]\w[^0-9]+$";
            //Regex rg = new Regex(patern);
            //Match m = rg.Match(txt_PhanQuyen.Text);
            //if (!m.Success)
            //{
            //    MessageBox.Show("Phân quyền không được để trống và chỉ được nhập chữ !!!", "Lỗi");
            //    txt_PhanQuyen.Focus();
            //}
        }

        private void multi_cbx_MaNhanVien_Leave(object sender, EventArgs e)
        {

        }

        private void frmQuanLiTaiKhoan_Resize(object sender, EventArgs e)
        {
           this.Width= 536;
           this.Height = 349;
        }
        private bool kiemtra()
        {
            bool kq = true;
            //Kiem tra ten dang nhap
            string patern = @"^[^0-9]\w[^0-9]+$";
            Regex rg = new Regex(patern);
            Match m = rg.Match(txt_TenDangNhap.Text);
            if (!m.Success)
            {

                MessageBox.Show("Tên đăng nhập không được để trống ,ít nhất 3 kí tự và chỉ được nhập chữ !!!", "Lỗi");
                txt_TenDangNhap.Focus();
                return kq = false;
            }
            //Kiem tra trung ten dang nhap
            if (kt_tendn() == true)
            {
                MessageBox.Show("Tên đăng nhập này đã tồn tại","Lỗi");
                txt_TenDangNhap.Focus();
                return kq = false;
            }
            //Kiem tra mat khau
            string patern1 = @"^\d{3,8}$";
            Regex rg1 = new Regex(patern1);
            Match m1 = rg1.Match(txt_MatKhau.Text);
            if (!m1.Success)
            {
                MessageBox.Show("Mật khẩu không được để trống và phải từ 3 tới 8 số!!!", "Lỗi");
                txt_MatKhau.Focus();
                kq = false;
                return kq;
            }
            //Kiem tra phan quyen
            string patern2 = @"^[^0-9]\w[^0-9]+$";
            Regex rg2 = new Regex(patern2);
            Match m2 = rg2.Match(txt_PhanQuyen.Text);
            if (!m2.Success)
            {
                MessageBox.Show("Phân quyền không được để trống ,ít nhất 3 kí tự và chỉ được nhập chữ !!!", "Lỗi");
                txt_PhanQuyen.Focus();
                return kq = false;
            }

            return kq;
        }         
    }
}
